/**
 * wifi_ap.h
 * 
 * 使用hostapd管理WiFi接入点的头文件
 */

#ifndef WIFI_AP_H
#define WIFI_AP_H

#include <stdint.h>

// 错误码定义
typedef enum {
    WIFI_AP_SUCCESS = 0,
    WIFI_AP_ERROR_GENERAL = -1,
    WIFI_AP_ERROR_CONFIG = -2,
    WIFI_AP_ERROR_HOSTAPD_NOT_FOUND = -3,
    WIFI_AP_ERROR_INTERFACE_DOWN = -4,
    WIFI_AP_ERROR_IP_CONFIG = -5,
    WIFI_AP_ERROR_PROCESS = -6,
    WIFI_AP_ERROR_SIGNAL = -7,
    WIFI_AP_ERROR_PERMISSION = -8,
    WIFI_AP_ERROR_ALREADY_RUNNING = -9
} wifi_ap_error_t;

// WiFi AP配置结构体
typedef struct {
    char interface[32];        // WiFi接口名称(如"wlan0")
    char ssid[32];             // WiFi名称
    char password[64];         // WiFi密码(至少8个字符)
    char channel[4];           // WiFi信道(1-13)
    char hw_mode[4];           // 硬件模式("g", "n", "ac"等)
    char ieee80211d[4];        // 是否启用IEEE802.11d("1"启用，"0"禁用)
    char country_code[4];      // 国家代码(如"CN")
    char ieee80211n[4];        // 是否启用IEEE802.11n("1"启用，"0"禁用)
    char wmm_enabled[4];       // 是否启用WMM("1"启用，"0"禁用)
    char auth_algs[4];         // 认证算法("1"开放系统，"2"共享密钥，"3"两者)
    char wpa[4];               // WPA版本("1"、"2"或"3")
    char wpa_key_mgmt[32];     // WPA密钥管理("WPA-PSK", "WPA-EAP"等)
    char wpa_pairwise[32];     // WPA配对密码("TKIP", "CCMP"等)
    char rsn_pairwise[32];     // RSN配对密码("TKIP", "CCMP"等)
    char macaddr_acl[4];       // MAC地址访问控制("0"关闭，"1"允许列表，"2"拒绝列表)
    char ignore_broadcast_ssid[4]; // 是否隐藏SSID("0"不隐藏，"1"隐藏)
    char hostapd_path[128];    // hostapd可执行文件路径
    char config_path[128];     // 配置文件路径
} wifi_ap_config_t;

// WiFi AP状态结构体
typedef struct {
    int running;               // AP运行状态(0=未运行，1=运行中)
    int pid;                   // hostapd进程ID
    wifi_ap_config_t config;   // 当前配置
} wifi_ap_state_t;

/**
 * 检查文件是否存在
 * \param path 文件路径
 * \return 存在返回1，不存在返回0
 */
int file_exists(const char *path);

/**
 * 执行系统命令并检查结果
 * \param cmd 要执行的命令
 * \param error_msg 错误提示信息
 * \return 成功返回WIFI_AP_SUCCESS，失败返回错误码
 */
wifi_ap_error_t execute_command(const char *cmd, const char *error_msg);

/**
 * 初始化WiFi AP配置为默认值
 * \param config 配置结构体指针
 * 
return 成功返回WIFI_AP_SUCCESS，失败返回错误码
 */
wifi_ap_error_t wifi_ap_init_config(wifi_ap_config_t *config);

/**
 * 创建hostapd配置文件
 * \param config 配置结构体
 * 
eturn 成功返回WIFI_AP_SUCCESS，失败返回错误码
 */
wifi_ap_error_t wifi_ap_create_config_file(const wifi_ap_config_t *config);

/**
 * 启动WiFi接入点
 * \param config 配置结构体
 * \param state 状态结构体指针，用于存储运行状态
 * 
eturn 成功返回WIFI_AP_SUCCESS，失败返回错误码
 */
wifi_ap_error_t wifi_ap_start(const wifi_ap_config_t *config, wifi_ap_state_t *state);

/**
 * 停止WiFi接入点
 * \param state 状态结构体指针
 * 
eturn 成功返回WIFI_AP_SUCCESS，失败返回错误码
 */
wifi_ap_error_t wifi_ap_stop(wifi_ap_state_t *state);

/**
 * 检查WiFi接入点状态
 * \param state 状态结构体指针
 * 
eturn 成功返回WIFI_AP_SUCCESS，失败返回错误码
 */
wifi_ap_error_t wifi_ap_check_status(wifi_ap_state_t *state);

/**
 * 设置WiFi接口IP地址
 * \param interface 接口名称
 * \param ip_addr IP地址
 * \param netmask 子网掩码
 * 
eturn 成功返回WIFI_AP_SUCCESS，失败返回错误码
 */
wifi_ap_error_t wifi_ap_set_ip(const char *interface, const char *ip_addr, const char *netmask);

/**
 * 启用WiFi接口
 * \param interface 接口名称
 * 
eturn 成功返回WIFI_AP_SUCCESS，失败返回错误码
 */
wifi_ap_error_t wifi_ap_enable_interface(const char *interface);

/**
 * 获取错误信息描述
 * \param error_code 错误码
 * 
eturn 错误描述字符串
 */
const char *wifi_ap_get_error_string(wifi_ap_error_t error_code);

/**
 * 清理临时文件和资源
 * \param config 配置结构体
 * \return 成功返回WIFI_AP_SUCCESS，失败返回错误码
 */
wifi_ap_error_t wifi_ap_cleanup(const wifi_ap_config_t *config);

#endif /* WIFI_AP_H */